﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Persistencia;
using SearchServer.AppManager;
using System.Data;

namespace SearchServer.UI
{
    public partial class Reportes : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Usuario user = (Usuario)Session["Usuario_SIT"];
            if (user != null && Utilidades.Utilidades.ValidarUsuarioSesion(user))
            {
                if (!IsPostBack)
                {  
                    BarraNavegacion.Text = Utilidades.Utilidades.CargarLinksVentana(user);
                    List<string> reportsName = new List<string>();
                    reportsName.Add("BusquedasPorFecha");
                    reportsName.Add("Top10UsuariosBusquedas");
                    reportsName.Add("Top10UsuariosLogin");
                    reportsName.Add("Top5Busquedas");
                    RadioButtonList1.DataSource = reportsName;
                    RadioButtonList1.DataBind();
                    Calendar1.Visible = false;
                    Calendar2.Visible = false;
                    Button1.Visible = false;
                    Label1.Visible = false;
                    Label2.Visible = false;
                }
            }
            else
            {
                Response.Redirect("Login.aspx", false);
            }
        }

        private void CargarGrillaBusquedasPorFecha(DateTime fechaDesde, DateTime fechaHasta)
        {
            Calendar1.Visible = false;
            Calendar2.Visible = false;
            Button1.Visible = false;
            Label1.Visible = false;
            Label2.Visible = false;
            ReportManager reportManager = ReportManager.GetInstancia();
            List<Log> resultado = reportManager.ReporteBusquedasPorFecha(fechaDesde, fechaHasta);
            tablaResultados.Text = "";
            tablaResultados.Visible = true;
            //Cabezal de la tabla
            tablaResultados.Text += "<tr>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 10%'>";
            tablaResultados.Text += "Fecha";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 40%;'>";
            tablaResultados.Text += "Busqueda";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 20%;'>";
            tablaResultados.Text += "Nombre Usuario";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 20%;'>";
            tablaResultados.Text += "Apellido Usuario";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "</tr>";
            //Fila para cada Distribucion
            int Numero = 0;
            foreach (Persistencia.Log busqueda in resultado)
            {
                if (Numero % 2 == 0)
                {
                    //PAR
                    tablaResultados.Text += "<tr class='gridItem'>";
                }
                else
                {
                    //IMPAR
                    tablaResultados.Text += "<tr class='gridAlternatingItem'>";
                }
                tablaResultados.Text += "<td style='text-align:left; padding-left:5px;'>";
                tablaResultados.Text += busqueda.Fecha.ToString();
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "<td>";
                tablaResultados.Text += busqueda.Terminos;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "<td>";
                tablaResultados.Text += busqueda.Usuario1.Nombre;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "<td>";
                tablaResultados.Text += busqueda.Usuario1.Apellido;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "</tr>";
                Numero += 1;
            }
        }


        private void CargarGrillaTop10UsuariosBusquedas()
        {
            ReportManager reportManager = ReportManager.GetInstancia();
            List<Usuario> resultado = reportManager.ReporteTop10UsuariosBusquedas();
            tablaResultados.Visible = true;
            tablaResultados.Text = "";
            //Cabezal de la tabla
            tablaResultados.Text += "<tr>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 50%;'>";
            tablaResultados.Text += "Nombre Usuario";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 50%;'>";
            tablaResultados.Text += "Apellido Usuario";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "</tr>";
            //Fila para cada Distribucion
            int Numero = 0;
            foreach (Persistencia.Usuario usuario in resultado)
            {
                if (Numero % 2 == 0)
                {
                    //PAR
                    tablaResultados.Text += "<tr class='gridItem'>";
                }
                else
                {
                    //IMPAR
                    tablaResultados.Text += "<tr class='gridAlternatingItem'>";
                }
                tablaResultados.Text += "<td style='text-align:left; padding-left:5px;'>";
                tablaResultados.Text += usuario.Nombre;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "<td>";
                tablaResultados.Text += usuario.Apellido;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "</tr>";
                Numero += 1;
            }
        }

        private void CargarGrillaTop10UsuariosLogin()
        {
            ReportManager reportManager = ReportManager.GetInstancia();
            List<Usuario> resultado = reportManager.ReporteTop10UsuariosLogin();
            tablaResultados.Visible = true;
            tablaResultados.Text = "";
            //Cabezal de la tabla
            tablaResultados.Text += "<tr>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 40%;'>";
            tablaResultados.Text += "Nombre Usuario";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 40%;'>";
            tablaResultados.Text += "Apellido Usuario";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 20%;'>";
            tablaResultados.Text += "Ingresos al sistema";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "</tr>";
            //Fila para cada Distribucion
            int Numero = 0;
            foreach (Persistencia.Usuario usuario in resultado)
            {
                if (Numero % 2 == 0)
                {
                    //PAR
                    tablaResultados.Text += "<tr class='gridItem'>";
                }
                else
                {
                    //IMPAR
                    tablaResultados.Text += "<tr class='gridAlternatingItem'>";
                }
                tablaResultados.Text += "<td style='text-align:left; padding-left:5px;'>";
                tablaResultados.Text += usuario.Nombre;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "<td>";
                tablaResultados.Text += usuario.Apellido;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "<td>";
                tablaResultados.Text += usuario.Cantidad_Veces_Loguea;
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "</tr>";
                Numero += 1;
            }
        }

        private void CargarGrillaTop5Busquedas()
        {
            ReportManager reportManager = ReportManager.GetInstancia();
            List<Array> resultado = reportManager.ReporteTop5Busquedas();
            tablaResultados.Visible = true;
            tablaResultados.Text = "";
            //Cabezal de la tabla
            tablaResultados.Text += "<tr>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 50%;'>";
            tablaResultados.Text += "Término";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "<td class='gridHeader' style='text-align: center;width: 50%;'>";
            tablaResultados.Text += "Busquedas";
            tablaResultados.Text += "</td>";
            tablaResultados.Text += "</tr>";
            //Fila para cada Distribucion
            int Numero = 0;
            foreach (Array datos in resultado)
            {
                if (Numero % 2 == 0)
                {
                    //PAR
                    tablaResultados.Text += "<tr class='gridItem'>";
                }
                else
                {
                    //IMPAR
                    tablaResultados.Text += "<tr class='gridAlternatingItem'>";
                }
                tablaResultados.Text += "<td style='text-align:left; padding-left:5px;'>";
                tablaResultados.Text += datos.GetValue(1);
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "<td>";
                tablaResultados.Text += datos.GetValue(0);
                tablaResultados.Text += "</td>";
                tablaResultados.Text += "</tr>";
                Numero += 1;
            }
        }

        protected void RadioButtonList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string reporte = "";
            if (RadioButtonList1.SelectedIndex > -1)
            {
                reporte = RadioButtonList1.SelectedItem.Text;
            }
            if (reporte == "BusquedasPorFecha")
            {
                Calendar1.Visible = true;
                Calendar2.Visible = true;
                Button1.Visible = true;
                Label1.Visible = true;
                Label2.Visible = true;
                tablaResultados.Visible = false;
            }
            if (reporte == "Top10UsuariosBusquedas")
            {
                tablaResultados.Visible = false;
                CargarGrillaTop10UsuariosBusquedas();
            }
            if (reporte == "Top10UsuariosLogin")
            {
                tablaResultados.Visible = false;
                CargarGrillaTop10UsuariosLogin();
            }
            if (reporte == "Top5Busquedas")
            {
                tablaResultados.Visible = false;
                CargarGrillaTop5Busquedas();
            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            DateTime fechaDesde = Calendar1.SelectedDate;
            DateTime fechaHasta = Calendar2.SelectedDate;
            CargarGrillaBusquedasPorFecha(fechaDesde, fechaHasta);
        }
    }
}